﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using SegIdenMovilBT.Entidad;
using SegIdenMovilBT.DataAccess;
using System.Data;

namespace SegIdenMovilBT.Datos
{
    public class PrestamoDA
    {
        #region --- Constantes ---
        private const string PARAM_CODPRESTAMO = "CODPRESTAMO";
        private const string PARAM_CODCLIENTE = "CODCLIENTE";
        private const string PARAM_PERIODOXDIAS = "PERIODOXDIAS";
        private const string PARAM_FECHAINICIO = "FECHAINICIO";
        private const string PARAM_FECHAFIN = "FECHAFIN";
        private const string PARAM_CODUSUARIO = "CODUSUARIO";
        private const string PARAM_ESTADO = "ESTADO";
        private const string PARAM_CODDISENIADOR = "CODDISENIADOR";
        private const string PARAM_CODTIENDA = "CODTIENDA";

        private const string PARAM_ITEM_CODITEM = "CODITEM";
        #endregion

        #region --- Metodos Propios ---
        public bool registrarPrestamo(Prestamo prestamo)
        {
            int resultado = 0;

            StringBuilder sentenciaCabeceraSQL = null;
            StringBuilder sentenciaDetalleSQL = null;

            sentenciaCabeceraSQL = new StringBuilder();
            sentenciaCabeceraSQL.Append("INSERT INTO venta (CODCLIENTE, CODTIENDA, PERIODOXDIAS, FECHAINICIO, FECHAFIN, CODUSUARIO, ");
            sentenciaCabeceraSQL.Append("ESTADO, FECHAREGISTRO, CODDISENIADOR) ");
            sentenciaCabeceraSQL.Append("VALUES (@CODCLIENTE, @CODTIENDA, @PERIODOXDIAS, @FECHAINICIO, FECHAFIN, @CODUSUARIO, ");
            sentenciaCabeceraSQL.Append("@ESTADO, SYDATE(), @CODDISENIADOR) ");

            sentenciaDetalleSQL = new StringBuilder();
            sentenciaDetalleSQL.Append("INSERT INTO det_venta (CODPRESTAMO, CODITEM) ");
            sentenciaDetalleSQL.Append("VALUES(@CODPRESTAMO, @CODITEM);");

            // Carga de datos obtenido de la BD
            using (Database db = new Database())
            {
                using (IDbTransaction transa = db.iniciarTransaccionSQLite())
                {
                    #region --- Registro Prestamo ---
                    db.TextoSQL = sentenciaCabeceraSQL.ToString();
                    db.agregarParametro(PARAM_CODCLIENTE, DbType.Int32, ParameterDirection.Input, prestamo.cliente.codCliente);
                    db.agregarParametro(PARAM_PERIODOXDIAS, DbType.Int32, ParameterDirection.Input, prestamo.periodoxDias);
                    db.agregarParametro(PARAM_FECHAINICIO, DbType.DateTime, ParameterDirection.Input, prestamo.fechaInicio);
                    db.agregarParametro(PARAM_FECHAFIN, DbType.DateTime, ParameterDirection.Input, prestamo.fechaFin);
                    db.agregarParametro(PARAM_CODUSUARIO, DbType.Int32, ParameterDirection.Input, prestamo.usuario.codUsuario);
                    db.agregarParametro(PARAM_CODTIENDA, DbType.Int32, ParameterDirection.Input, prestamo.tienda.codigo);
                    db.agregarParametro(PARAM_CODDISENIADOR, DbType.Int32, ParameterDirection.Input, null);
                    db.agregarParametro(PARAM_ESTADO, DbType.String, ParameterDirection.Input, prestamo.estado);

                    prestamo.codPrestamo = db.ejecutarEscalar().ToString();
                    #endregion

                    #region --- Registro Detalle Venta ---
                    db.TextoSQL = sentenciaDetalleSQL.ToString();

                    db.agregarParametro(PARAM_CODPRESTAMO, DbType.Int32, ParameterDirection.Input);
                    db.agregarParametro(PARAM_ITEM_CODITEM, DbType.Int32, ParameterDirection.Input);

                    foreach (Item item in prestamo.listaItem.lista)
                    {
                        db.obtenerParametro(PARAM_CODPRESTAMO).Value = prestamo.codPrestamo;
                        db.obtenerParametro(PARAM_ITEM_CODITEM).Value = item.codItem;
                    }
                    #endregion

                    transa.Commit();
                }
            }

            return resultado > 0;
        }
        #endregion
    }
}
